package com.yonyou.crm.base.product.service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;

import com.yonyou.crm.base.product.entity.ProductOrgVO;
import com.yonyou.crm.base.product.entity.ProductVO;
import com.yonyou.crm.common.biz.service.BaseBizServiceImpl;

@Service
public class ProductOrgBizServiceImpl extends BaseBizServiceImpl<ProductOrgVO> {

	/**
	 * 分配组织
	 * @param productId
	 * @param orgIds
	 */
	public void allocateOrg(Long productId, String[] orgIds) {
		
		deleteProductOrg(productId);
		insertProductOrg(fillProductOrgList(productId, orgIds));
	}
	
	/**
	 * 产品组织字段翻译
	 * @param ids
	 * @return
	 */
	public Object selectProductOrgById(Object[] ids) {
		Map<String, Object> para = new HashMap<String, Object>();
		para.put("ids", ids);
		return dao.selectList(ProductOrgVO.class, "selectProductOrgById", para);
	}
	
	/**
	 * 删除产品组织
	 * @param id
	 */
	public void deleteProductOrg(Long id) {
		Map<String, Object> paramMap = new HashMap<String, Object>();
		paramMap.put("id", id);
		dao.deleteSql(ProductOrgVO.class, "deleteProductOrg", paramMap);
	}
	
	/**
	 * 新增产品组织
	 * @param voList
	 */
	public void insertProductOrg(ProductVO vo) {
		
		if (vo == null || vo.getOrgId() == null || vo.getOrgId().length() == 0) {
			return;
		}
		
		List<ProductOrgVO> voList = fillProductOrgList(vo.getId(), vo.getOrgId().split(","));
		if (voList != null && voList.size() > 0) {
			insertProductOrg(voList);
		}
	}
	
	/**
	 * 修改产品组织
	 * @param vo
	 */
	public void updateProductOrg(ProductVO vo) {
		
		if (vo == null || StringUtils.isBlank(vo.getOrgId())) {
			return;
		}
		
		List<ProductOrgVO> voList = fillProductOrgList(vo.getId(), vo.getOrgId().split(","));
		if (voList != null && voList.size() > 0) {
			deleteProductOrg(vo.getId());
			insertProductOrg(voList);
		}
	}
	
	/**
	 * 批量删除产品组织
	 * @param codes
	 */
	public void batchDeleteProductOrg(String[] codes) {
		Map<String, Object> paramMap = new HashMap<String, Object>();
		paramMap.put("ids", codes);
		dao.deleteSql(ProductOrgVO.class, "batchDeleteProductOrg", paramMap);
	}
	
	/**
	 * 新增产品组织
	 * @param voList
	 */
	private void insertProductOrg(List<ProductOrgVO> voList) {
		dao.saveSql(ProductOrgVO.class, "insertProductOrg", voList);
	}
	
	/**
	 * 填装对象列表
	 * @param productId
	 * @param orgIds
	 * @return
	 */
	private List<ProductOrgVO> fillProductOrgList(Long productId, String[] orgIds) {

		if (productId == null || orgIds == null || orgIds.length == 0) {
			return null;
		}

		List<ProductOrgVO> voList = new ArrayList<ProductOrgVO>();
		for (String orgId : orgIds) {
			ProductOrgVO poVO = new ProductOrgVO();
			poVO.setOrgId(new Long(orgId));
			poVO.setProductId(productId);
			voList.add(poVO);
		}
		
		return voList;
	}
}
